package com.shensi.appCollect.service;

import com.shensi.api.order.domian.station.*;
import com.shensi.appCollect.pojo.*;
import com.shensi.appCollect.pojo.AppUserInfo;
import com.shensi.appCollect.pojo.dto.CouponPaymetDto;
import com.shensi.appCollect.pojo.dto.carWashPaymentDto;
import com.shensi.appCollect.pojo.dto.newCarWashPaymetDto;
import com.shensi.appCollect.utils.ResultData;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface CouponService {
  /**
   * 计算使用优惠券后金额
   * @param mobilePhone
   * @param entepriseId
   * @param amt
   * @return
   */
  List<CouponUser> calCouponAmt(String mobilePhone, Integer entepriseId, BigDecimal amt);

  /**
   * 查询用户该领取方式下已有的优惠券数量
   * @param couponUser
   * @return
   */
  int selectCouUserSum(CouponUser couponUser);

  /**
   * 统计优惠券数量
   * @param mobilePhone
   * @param enterpriseId
   * @return
   */
  int setCoupnCount(String mobilePhone, Integer enterpriseId);


  /***
   * 查询用户核销列表
   * @param couponUser
   * @return
   */
  List<CouponUser> selectVerUserCouponList(CouponUser couponUser);

  /**
   * 获取该领取方式下的优惠券
   * @param param
   * @return
   */
  List<CouponIssue> selectCouponListByCouponIssueId(Map<String, Object> param);
  // 根据活动 ID 查询对应的 issue_id 列表
  List<String> getIssueIdsByActivityId(String activityId);

  List<String> getIssueIdsandCouponByActivityId(String activityId);

  List<String> getIssueIdsByActivityIdAndAmt(String activityId,BigDecimal receivedAmt);

  Map<String,Object> getActivityAllByActivityId(String activityId);

  String getAppUserGrowLevel(String mobilePhone,Long enterpriseId);

  String checkisLabelUser(String mobilePhone,Long enterpriseId,String couponIssueId);

  String checkCouponActivity(Integer enterpriseId, PayOrder payOrderInfo,Double amt );

  /**
   * 查询优惠券单独活动信息，无优惠券
   * @param couponIssue
   * @return
   */
  CouponIssue selectCouponIssueInfo(CouponIssue couponIssue);

  /**
   * 查询该用户当天参加本次优惠券的活动次数
   * @param couponUserGiveCount
   * @return
   */
  int selectCouponUserGiveCountByToday(CouponUserGiveCount couponUserGiveCount);

  int selectCouponUser(String couponIssueId , String mobilePhone);

  /**
   * 保存用户优惠券
   * @param couponUser
   * @return
   */
  int saveCouponUser(CouponUser couponUser);

  /**
   * 更新优惠券模板数量
   * @param couponTemplate
   * @return
   */
  int updateCouponTemplate(CouponTemplate couponTemplate);

  /***
   * 查询用户已有优惠券
   * @param param
   * @return
   */
  List<CouponUser> selectCouponUserList(Map<String, Object> param);

  /***
   * 消费完自动领取优惠券
   * @param appUserInfo
   * @param stationId
   * @param amt
   */
  int initiativeCoupon(AppUserInfo appUserInfo, Integer stationId, BigDecimal amt,String orderNo);


  /**
   * 领取优惠券公众号推送通知
   * @param station  油站ID
   * @param payOrderInfo
   * @param appUserInfo
   */
  void pushWxGzhInitiativeCouponInfo(Station station, PayOrder payOrderInfo, int i, AppUserInfo appUserInfo);

  /***
   * 领取优惠券公众号推送通知
   * @param enterprise 油企ID
   * @param i
   * @param appUserInfo
   */
  void pushWxGzhInitiativeCouponInfo(Enterprise enterprise, int i, AppUserInfo appUserInfo);

  /**
   * 批量保存用户优惠券
   * @param couponUsersList
   * @return
   */
  int saveBatchCouponUser(@Param("couponUsersList") List<CouponUser> couponUsersList);

  /**
   * 批量更新优惠券模板领取数量
   * @param ids
   * @return
   */
  int updateBatchCouponTemplate(List<Integer> ids);

  /**
   * 更新用户优惠券信息
   * @param couponUser
   * @return
   */
  int updateCouponUser(CouponUser couponUser);

  /***
   * 用户进入领取页面的次数
   * @param couponUserGiveCount
   * @return
   */
  CouponUserGiveCount selectCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

  /**
   * 更新用户进入领取页面的次数
   * @param couponUserGiveCount
   */
  int updateCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

  /**
   * 新增用户进入该领取方式次数信息
   * @param couponUserGiveCount
   */
  int insertCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

  /**
   * 查询用户该领取方式下的参与次数
   * @param couponUserGiveCount
   * @return
   */
  int selectUserIssueGiveCount(CouponUserGiveCount couponUserGiveCount);

  /***
   * 查询最后一次领取的随机数
   * @param couponUser
   * @return
   */
  CouponUser selectUserIssueRedomMax(CouponUserGiveCount couponUser);

  /***
   * 根据用户已领取优惠券查询用户领取的优惠券模板列
   * @param couponUser
   * @return
   */
  List<CouponTemplate> selectCouponTemListByCouponUser(CouponUser couponUser);

  /***
   * 批量查询模板列
   * @param couponTemplate
   * @return
   */
  List<CouponTemplate> selectCouponTemListByTemIds(CouponTemplate couponTemplate);

  /***
   * 查询优惠券模板信息
   * @param couponTemplate
   * @return
   */
  CouponTemplate selectCouponTemInfoById(CouponTemplate couponTemplate);

  /***
   * 查询用户所有的优惠券 公众号展示用户优惠用
   * @param couponUser
   * @return
   */
  List<CouponUser> selectUserAllCoupons(CouponUser couponUser);

  /***
   * 查询用户已结束优惠券 公众号展示用户优惠用
   * @param couponUser
   * @return
   */
  List<CouponUser> selectUsedCoupons(CouponUser couponUser);

  /***
   * 用户开通超级会员后自动发放优惠券
   * @param appUserInfo
   * @param appUserSuper
   */
  void userSuperCoupon(AppUserInfo appUserInfo,AppUserSuper appUserSuper);

  public int initiativeCouponV2(AppUserInfo appUserInfo, Integer stationId, BigDecimal amt);

  BigDecimal queryMinUseCouponAtmByCouponTemlete(Integer id);

  ResultData<?> carWashCouponDestroy(carWashPaymentDto cw);

  CouponInfo selectCouponTemInfoById(Long couponInfoId);


  public CouponInfoSettingDetail getCouponInfoIdByCustomerCardUseRecord(CustomerCardUseRecord cardRecordByOrderNo,String payType) ;

  /**
   * 获取油企是否开启注册自动发券
   * @param enterpriseId
   * @return
   */
  List<String> getCouponActivity(Integer enterpriseId);

  /**
   * 获取注册发券的优惠券信息
   * @param enterpriseId
   * @param mobilePhone
   * @return
   */
  String getRegisterCoupon(Integer enterpriseId, String mobilePhone);

//  void registrationRelease(AppUserInfo appUserInfo);

  List<CouponInfo> getCouponInfoByCouponIssue(List<String> couponIssues);

  ResultData<?> newCarWashCouponDestroy(newCarWashPaymetDto cw);

  ResultData<?> couponDestroy(CouponPaymetDto cw);

  ResultData<?> couponDestroyList(CouponPaymetDto cw);

  /**
   * 优惠券失效公众号推送通知
   */
  void batchPushWxGzhCouponExpire();
}
